// 最长双回文串长度
// 输入字符串s，求s的最长双回文子串t的长度
// 双回文子串就是可以分成两个回文串的字符串
// 比如"aabb"，可以分成"aa"、"bb"
// 测试链接 : https://www.luogu.com.cn/problem/P4555
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100002;
char s[MAXN];
char ss[MAXN << 1];
int p[MAXN << 1];
int left[MAXN << 1];
int right[MAXN << 1];
int n;

void manacherss()
{
    n = strlen(s) * 2 + 1;
    for(int i = 0, j = 0; i < n; ++i)
    {
        ss[i] = (i & 1) == 0 ? '#' : s[j++];
    }
}

void manacher()
{
    manacherss();
    for(int i = 0, r = 0, c = 0, len; i < n; ++i)
    {
        len = r > i ? min(p[2 * c - i], r - i) : 1;
        while(i + len < n && i - len >= 0 && ss[i + len] == ss[i - len])
        {
            ++len;
        }
        if(i + len > r)
        {
            r = i + len;
            c = i;
        }
        p[i] = len;
    }
}

int compute()
{
    manacher();
    for(int i = 0, j = 0; i < n; ++i)
    {
        while(i + p[i] > j)
        {
            ::left[j] = j - i;
            j += 2;
        }
    }
    for(int i = n - 1, j = n - 1; i >= 0; --i)
    {
        while(i - p[i] < j)
        {
            ::right[j] = i - j;
            j -= 2;
        }
    }
    int ans = 0;
    for(int i = 2; i <= n - 3; i += 2)
    {
        ans = max(ans, ::left[i] + ::right[i]);
    }
    return ans;
}

int main()
{
    scanf("%s", s);
    printf("%d\n", compute());

    return 0;
}